import asyncio
import time


async def crawl_page(url):
    print('正在爬取 {}'.format(url))
    sleep_time = int(url.split('_')[-1])
    await asyncio.sleep(sleep_time)
    print('OK {}'.format(url))

'''
这下仅需要4s，也就是4个任务中，耗时最长的那个任务所需要的时间。
执行过程：
在第一个for循环里，通过调用异步函数crawl_page(url)得到4个协程对象。
在第二个for循环里，通过asyncio.create_task给4个协程对象分别创建了task。接着，4个任务被await调用执行。
'''
async def main(urls):
    time_start = time.time()
    tasks = []
    for url in urls:
        tasks.append(asyncio.create_task(crawl_page(url)))  # 创建task
    for task in tasks:
        await task
    time_end = time.time()
    print("爬取耗时共计{}s".format(int(time_end - time_start)))



if __name__ == '__main__':
    asyncio.run(main(['url_1', 'url_2', 'url_3', 'url_4']))